--- /dev/null
+/*
+ * File : timestwo.c
+ * Abstract:
+ * An example C-file S-function for multiplying an input by 2,
+ * y = 2*u
+ *
+ * Real-Time Workshop note:
+ * This file can be used as is (noninlined) with the Real-Time Workshop
+ * C rapid prototyping targets, or it can be inlined using the Target
+ * Language Compiler technology and used with any target. See
+ * matlabroot/toolbox/simulink/blocks/tlc_c/timestwo.tlc
+ * the TLC code to inline the S-function.
+ *
+ * See simulink/src/sfuntmpl_doc.c
+ *
+ * Copyright 1990-2009 The MathWorks, Inc.
+ * $Revision: 1.1.6.2 $
+ */
+
+
+#define S_FUNCTION_NAME timestwo
+#define S_FUNCTION_LEVEL 2
+
+#include "simstruc.h"
+
+/*================*
+ * Build checking *
+ *================*/
+
+
+/* Function: mdlInitializeSizes ===============================================
+ * Abstract:
+ * Setup sizes of the various vectors.
+ */
+static void mdlInitializeSizes(SimStruct *S)
+{
+ ssSetNumSFcnParams(S, 0);
+ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
+ return; /* Parameter mismatch will be reported by Simulink */
+ }
+
+ if (!ssSetNumInputPorts(S, 1)) return;
+ ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED);
+ ssSetInputPortDirectFeedThrough(S, 0, 1);
+
+ if (!ssSetNumOutputPorts(S,1)) return;
+ ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED);
+
+ ssSetNumSampleTimes(S, 1);
+
+ /* specify the sim state compliance to be same as a built-in block */
+ ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);
+
+ /* Take care when specifying exception free code - see sfuntmpl_doc.c */
+ ssSetOptions(S,
+ SS_OPTION_WORKS_WITH_CODE_REUSE |
+ SS_OPTION_EXCEPTION_FREE_CODE |
+ SS_OPTION_USE_TLC_WITH_ACCELERATOR);
+}
+
+
+/* Function: mdlInitializeSampleTimes =========================================
+ * Abstract:
+ * Specifiy that we inherit our sample time from the driving block.
+ */
+static void mdlInitializeSampleTimes(SimStruct *S)
+{
+ ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
+ ssSetOffsetTime(S, 0, 0.0);
+ ssSetModelReferenceSampleTimeDefaultInheritance(S);
+}
+
+/* Function: mdlOutputs =======================================================
+ * Abstract:
+ * y = 2*u
+ */
+static void mdlOutputs(SimStruct *S, int_T tid)
+{
+ int_T i;
+ InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
+ real_T *y = ssGetOutputPortRealSignal(S,0);
+ int_T width = ssGetOutputPortWidth(S,0);
+
+ for (i=0; i<width; i++) {
+ /*
+ * This example does not implement complex signal handling.
+ * To find out see an example about how to handle complex signal in
+ * S-function, see sdotproduct.c for details.
+ */
+ *y++ = 2.0 *(*uPtrs[i]);
+ }
+}
+
+
+/* Function: mdlTerminate =====================================================
+ * Abstract:
+ * No termination needed, but we are required to have this routine.
+ */
+static void mdlTerminate(SimStruct *S)
+{
+}
+
+
+
+#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
+#include "simulink.c" /* MEX-file interface mechanism */
+#else
+#include "cg_sfun.h" /* Code generation registration function */
+#endif